package one;

public class A016 {

    /**
     * 乘以自身以外数组的乘积
     * @param nums
     * @return
     */

    public int[] productExceptSelf(int[] nums) {
        //前缀和后缀积
        int n = nums.length;
        int[] dp1 = new int[n];
        int[] dp2 = new int[n];
        dp1[0]=nums[0];dp2[n-1]=nums[n-1];
        for(int i=1;i<n;i++) {
            dp1[i] = dp1[i-1] * nums[i];
        }
        for(int i=n-2;i>=0;i--) {
            dp2[i] = dp2[i+1] * nums[i];
        }
        int[] answer = new int[n];
        //两个特殊位置
        answer[0]=dp2[1];answer[n-1]=dp1[n-2];
        for(int i=1;i<n-1;i++) {
            answer[i] = dp1[i-1] * dp2[i+1];
        }
        return answer;
    }
}
